package beans;

import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.UnidadAcademicaDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.UnidadAcademica;
import modelo.Proyecto;

@ManagedBean 
@RequestScoped
public class EditarUnidadesAcademicasBean {

	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<UnidadAcademica> unidadesAcademicas;
	private List<UnidadAcademica> seleccionBorrar;
	private Proyecto proyecto;
	private List <UnidadAcademica> seleccionUnidadAcademica;
	private List<UnidadAcademica> todasUnidadesAcademicas;

	@PostConstruct
	public void init(){
		
		// Seteo el proyecto a utilizar
		setProyecto(getEditProyectoBean().getProyecto());
		// Traigo las unidadesAcademicas
		this.setUnidadesAcademicas((List<UnidadAcademica>) getProyecto().getMis_unidades_academicas());					

		UnidadAcademicaDao actividadDao = new UnidadAcademicaDao();
		try {
			this.setTodasUnidadesAcademicas(actividadDao.getTodasUnidadAcademicaes());
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
	}

	public void agregar(){
		List<UnidadAcademica> uniAca = this.getUnidadesAcademicas();
		List<UnidadAcademica> selec = this.getSeleccionUnidadAcademica();
		for (UnidadAcademica uni : selec) {
			if (!getUnidadesAcademicas().contains(uni))
				uniAca.add(uni);
		}		
		this.setUnidadesAcademicas(uniAca);
		actualizarProyecto();
	}
	
	public void borrar(){
		List<UnidadAcademica> aBorrar = this.getSeleccionBorrar();
		
		for (UnidadAcademica uni : aBorrar) {
			this.getUnidadesAcademicas().remove(uni);
		}
		actualizarProyecto();
	}
	
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setMis_unidades_academicas(getUnidadesAcademicas());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}
	
	public String volver(){
		return "irEditarProyectos";
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<UnidadAcademica> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<UnidadAcademica> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public List<UnidadAcademica> getSeleccionUnidadAcademica() {
		return seleccionUnidadAcademica;
	}

	public void setSeleccionUnidadAcademica(List<UnidadAcademica> seleccionUnidadAcademica) {
		this.seleccionUnidadAcademica = seleccionUnidadAcademica;
	}

	public List<UnidadAcademica> getUnidadesAcademicas() {
		return unidadesAcademicas;
	}

	public void setUnidadesAcademicas(List<UnidadAcademica> unidadesAcademicas) {
		this.unidadesAcademicas = unidadesAcademicas;
	}

	public List<UnidadAcademica> getTodasUnidadesAcademicas() {
		return todasUnidadesAcademicas;
	}

	public void setTodasUnidadesAcademicas(List<UnidadAcademica> todasUnidadesAcademicas) {
		this.todasUnidadesAcademicas = todasUnidadesAcademicas;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}

	
}